home *** CD-ROM | disk | FTP | other *** search
- package sun.print;
-
- import java.security.AccessController;
- import java.util.ArrayList;
- import javax.print.DocFlavor;
- import javax.print.MultiDocPrintService;
- import javax.print.PrintService;
- import javax.print.PrintServiceLookup;
- import javax.print.attribute.Attribute;
- import javax.print.attribute.AttributeSet;
- import javax.print.attribute.HashPrintRequestAttributeSet;
- import javax.print.attribute.HashPrintServiceAttributeSet;
- import javax.print.attribute.PrintRequestAttribute;
- import javax.print.attribute.PrintServiceAttribute;
- import javax.print.attribute.PrintServiceAttributeSet;
- import javax.print.attribute.standard.PrinterName;
- import sun.security.action.GetPropertyAction;
- import sun.security.action.LoadLibraryAction;
-
- public class Win32PrintServiceLookup extends PrintServiceLookup {
- private String defaultPrinter;
- private PrintService defaultPrintService;
- private String[] printers;
- private PrintService[] printServices;
- private static Win32PrintServiceLookup win32PrintLUS;
-
- public static Win32PrintServiceLookup getWin32PrintLUS() {
- if (win32PrintLUS == null) {
- PrintServiceLookup.lookupDefaultPrintService();
- }
-
- return win32PrintLUS;
- }
-
- public Win32PrintServiceLookup() {
- if (win32PrintLUS == null) {
- win32PrintLUS = this;
- String var1 = (String)AccessController.doPrivileged(new GetPropertyAction("os.name"));
- if (var1 != null && var1.startsWith("Windows 98")) {
- return;
- }
-
- PrinterChangeListener var2 = new PrinterChangeListener(this);
- var2.setDaemon(true);
- var2.start();
- }
-
- }
-
- public synchronized PrintService[] getPrintServices() {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- var1.checkPrintJobAccess();
- }
-
- if (this.printServices == null) {
- this.refreshServices();
- }
-
- return this.printServices;
- }
-
- private synchronized void refreshServices() {
- this.printers = this.getAllPrinterNames();
- if (this.printers == null) {
- this.printServices = null;
- } else {
- PrintService[] var1 = new PrintService[this.printers.length];
- PrintService var2 = this.getDefaultPrintService();
-
- for(int var3 = 0; var3 < this.printers.length; ++var3) {
- if (var2 != null && this.printers[var3].equals(var2.getName())) {
- var1[var3] = var2;
- } else if (this.printServices == null) {
- var1[var3] = new Win32PrintService(this.printers[var3]);
- } else {
- int var4;
- for(var4 = 0; var4 < this.printServices.length; ++var4) {
- if (this.printServices[var4] != null && this.printers[var3].equals(this.printServices[var4].getName())) {
- var1[var3] = this.printServices[var4];
- this.printServices[var4] = null;
- break;
- }
- }
-
- if (var4 == this.printServices.length) {
- var1[var3] = new Win32PrintService(this.printers[var3]);
- }
- }
- }
-
- if (this.printServices != null) {
- for(int var5 = 0; var5 < this.printServices.length; ++var5) {
- if (this.printServices[var5] instanceof Win32PrintService && !this.printServices[var5].equals(this.defaultPrintService)) {
- ((Win32PrintService)this.printServices[var5]).invalidateService();
- }
- }
- }
-
- this.printServices = var1;
- }
- }
-
- public synchronized PrintService getPrintServiceByName(String var1) {
- if (var1 != null && !var1.equals("")) {
- if (this.printServices == null) {
- String[] var4 = this.getAllPrinterNames();
-
- for(int var3 = 0; var3 < var4.length; ++var3) {
- if (var4[var3].equals(var1)) {
- return new Win32PrintService(var1);
- }
- }
-
- return null;
- } else {
- for(int var2 = 0; var2 < this.printServices.length; ++var2) {
- if (this.printServices[var2].getName().equals(var1)) {
- return this.printServices[var2];
- }
- }
-
- return null;
- }
- } else {
- return null;
- }
- }
-
- boolean matchingService(PrintService var1, PrintServiceAttributeSet var2) {
- if (var2 != null) {
- Attribute[] var3 = var2.toArray();
-
- for(int var5 = 0; var5 < var3.length; ++var5) {
- PrintServiceAttribute var4 = var1.getAttribute(var3[var5].getCategory());
- if (var4 == null || !var4.equals(var3[var5])) {
- return false;
- }
- }
- }
-
- return true;
- }
-
- public PrintService[] getPrintServices(DocFlavor var1, AttributeSet var2) {
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- var3.checkPrintJobAccess();
- }
-
- HashPrintRequestAttributeSet var4 = null;
- HashPrintServiceAttributeSet var5 = null;
- if (var2 != null && !var2.isEmpty()) {
- var4 = new HashPrintRequestAttributeSet();
- var5 = new HashPrintServiceAttributeSet();
- Attribute[] var6 = var2.toArray();
-
- for(int var7 = 0; var7 < var6.length; ++var7) {
- if (var6[var7] instanceof PrintRequestAttribute) {
- var4.add(var6[var7]);
- } else if (var6[var7] instanceof PrintServiceAttribute) {
- var5.add(var6[var7]);
- }
- }
- }
-
- Object var11 = null;
- PrintService[] var12;
- if (var5 != null && var5.get(PrinterName.class) != null) {
- PrinterName var14 = (PrinterName)var5.get(PrinterName.class);
- PrintService var8 = this.getPrintServiceByName(var14.getValue());
- if (var8 != null && this.matchingService(var8, var5)) {
- var12 = new PrintService[]{var8};
- } else {
- var12 = new PrintService[0];
- }
- } else {
- var12 = this.getPrintServices();
- }
-
- if (var12.length == 0) {
- return var12;
- } else {
- ArrayList var15 = new ArrayList();
-
- for(int var16 = 0; var16 < var12.length; ++var16) {
- try {
- if (var12[var16].getUnsupportedAttributes(var1, var4) == null) {
- var15.add(var12[var16]);
- }
- } catch (IllegalArgumentException var10) {
- }
- }
-
- var12 = new PrintService[var15.size()];
- return (PrintService[])var15.toArray(var12);
- }
- }
-
- public MultiDocPrintService[] getMultiDocPrintServices(DocFlavor[] var1, AttributeSet var2) {
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- var3.checkPrintJobAccess();
- }
-
- return new MultiDocPrintService[0];
- }
-
- public synchronized PrintService getDefaultPrintService() {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- var1.checkPrintJobAccess();
- }
-
- this.defaultPrintService = null;
- this.defaultPrinter = this.getDefaultPrinterName();
- if (this.defaultPrinter == null) {
- return null;
- } else {
- if (this.printServices != null) {
- for(int var2 = 0; var2 < this.printServices.length; ++var2) {
- if (this.defaultPrinter.equals(this.printServices[var2].getName())) {
- this.defaultPrintService = this.printServices[var2];
- break;
- }
- }
- }
-
- if (this.defaultPrintService == null) {
- this.defaultPrintService = new Win32PrintService(this.defaultPrinter);
- }
-
- return this.defaultPrintService;
- }
- }
-
- private native String getDefaultPrinterName();
-
- private native String[] getAllPrinterNames();
-
- private native long notifyFirstPrinterChange(String var1);
-
- private native void notifyClosePrinterChange(long var1);
-
- private native int notifyPrinterChange(long var1);
-
- // $FF: synthetic method
- static long access$000(Win32PrintServiceLookup var0, String var1) {
- return var0.notifyFirstPrinterChange(var1);
- }
-
- // $FF: synthetic method
- static int access$100(Win32PrintServiceLookup var0, long var1) {
- return var0.notifyPrinterChange(var1);
- }
-
- // $FF: synthetic method
- static void access$200(Win32PrintServiceLookup var0) {
- var0.refreshServices();
- }
-
- // $FF: synthetic method
- static void access$300(Win32PrintServiceLookup var0, long var1) {
- var0.notifyClosePrinterChange(var1);
- }
-
- static {
- AccessController.doPrivileged(new LoadLibraryAction("awt"));
- }
- }
-